#ifndef Analizador_Datos
#define Analizador_Datos

#include <map>
#include <queue>
#include <list>
#include <vector>
#include <iostream>
#include <utility>
#include <fstream>
#include <cstdlib>
#include <limits.h>

using namespace std;

class Nodo
{
    public:
        static bool menor(Nodo, Nodo);
        Nodo();
        Nodo(const Nodo&);
        bool operator<(const Nodo)const;
        bool operator>(const Nodo)const;
        Nodo operator=(const Nodo);
        void setK(int);
        void setCota(int);
        void setValor(int);
        void setVector(vector<int>);
        void setNewData(int);
        int getCota();
        int getK();
        vector<int> getSolucion();
        void Muestra();
        bool IsIN(int);
    private:
        int k;                  //(Nivel de construcción de solución)
        int valor_cota;         //(Valor de cota del nodo)
        int valor;
        vector<int> solucion;   //(vector de solución actual)
};


class DatosProblema
{
    public:
        //DatosProblema(){};
        DatosProblema(string);
        void RellenarMatrizAdyacencia(int,int,int);
        void Analisis();
        int BuscarValor(int,int);
        int getModalidad();
        int getNum_elementos();
        void setCota(int);
        int getCota();
        void incExpansion();
        void incPoda();
        void incNNodo();
        void incUsados();
        int getUsados();
        int getExpansion();
        int getPoda();
        int getNNodo();
    private:
        int NNodo;
        int Usados;
        int Poda;
        int Expansion;
        int Cota;                   //(Valor de cota alcanzado en cada momento)
        int ValorInicialDeCota;
        int Num_elementos;
        int Modalidad;
        map<pair<int,int>,int> adyacencia;
        string nomFich;

};


#endif
